home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Network Supervisor's Toolkit
/
Network Supervisor's Toolkit.iso
/
tools
/
lu62
/
proc
/
ftpanel.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-07-10
|
6KB
|
243 lines
/*
* CopyRight 1995. Nicholas Poljakov all rights reserved.
*/
#include <malloc.h>
#include <dos.h>
#include <stdio.h>
#include "state1.h"
#include "vto.h"
#define ACSEND '\x6C' /* ¬«¡Ñµ »«½∩ */
#define SBA '\x11' /* πßΓá¡«ó¿Γ∞ áñpÑß íπΣÑpá */
#define SF '\x1D' /* ¡áτὫ »«½∩ */
tpanel(tp_id,conv_id,code,sub_code,position,data_ptr,
n,p_rc,s_hdr)
unsigned char tp_id[8];
unsigned long conv_id;
unsigned char code;
unsigned char sub_code;
unsigned char position[2];
unsigned char *data_ptr;
unsigned int n;
struct rc {
unsigned int prim ;
unsigned long sec ; } *p_rc;
struct shdr {
unsigned int aid ;
unsigned char col ;
unsigned char row ; } * s_hdr;
{
char *vtout(),*out_flow;
void vtin();
char *p;
unsigned int length,len,addr;
unsigned char rts;
char *d_ptr;
int max_length;
unsigned char wr; /*what receive */
char *out_str;
switch (code) {
case W :
case EW:
case E :
case EU:
case WB :
out_flow = vtout(data_ptr,n);
length = strlen(out_flow) + 2;
if ((out_str = malloc(length + 2 + 1)) == NULL) {
return -1;
}
strcpy(&out_str[2], out_flow);
out_str[0] = code;
out_str[1] = sub_code;
send_data (tp_id, conv_id, out_str, 0,0, length, p_rc, &rts);
free( out_str );
return (p_rc);
break;
case R :
case RM :
case TM :
case TP :
if ((out_str = malloc( 2 )) == NULL) {
return -1;
}
out_str[0] = code;
out_str[1] = sub_code;
length = 2;
send_data (tp_id, conv_id, out_str, 0,0, length, p_rc, &rts);
free( out_str );
max_length = 2017;
recwait (tp_id, conv_id, ll, p_rc, &len, max_length, &rts, d_ptr, &wr);
s_hdr-> aid =d_ptr[1];
addr = (d_ptr[2] & 0x3f) * 64 + (d_ptr[3] & 0x3f);
s_hdr->col = addr % 80 + 1;
s_hdr->row = addr / 80 + 1;
length = len - 3;
vtin((d_ptr+3),length,data_ptr,n);
return(s_hdr,data_ptr);
}
}
/*--------------------- vtin ----------------------------*/
void vtin(p,lengvp,pst,nStr)
char *p;
struct area *pst;
int lengvp,nStr;
{
int i,j,ind,rp=0;
struct area *p1;
unsigned int addr;
for(j=0; j < nStr; j++)
{
p1=pst+j;
if(*p == SBA)
{
addr = (*(p+1) & 0x3f) * 64 + (*(p+2) & 0x3f);
p1 -> row = addr/80 + 1;
p1 -> column = addr % 80 + 1;
goto m;
printf("ERROR\n");goto end;
m: ind=0;
rp=rp+3;
while(*(p + 3 + ind)!=SBA)
{
*((p1->data_in)+ind)=*((p+3)+ind);
ind++;
rp++;
if(rp > lengvp)
{
p1->length=ind-1;
goto end;
} /* end if */
} /* end while */
p1 -> length = ind;
p=p+3+ind;
} /* end if */
} /* end for */
end: ;
} /* end vtin */
/*--------------------- vtout ----------------------------*/
char *vtout(p,nStr)
struct area *p;
int nStr;
{
char screen[64];
unsigned int addr;
unsigned int j,z,RP=0,RP1=0,SHAB;
char ACS,*pvp,*p2;
struct area *p1;
int A,B;
#include "tablecod.h"
/*--------------------------------------------------------*/
for(j=0; j < nStr; j++)
{
p1=p+j;
RP1=(p1->length) + FSIZEWP + RP1;
}; /* end for */
pvp=malloc(RP1);
p2 = pvp;
for(z=0; z < nStr; z++)
{
SHAB = 0;
p1=p+z;
RP = p1 -> flag.protected;
SHAB = SHAB | RP;
SHAB = SHAB << 1;
RP = p1 -> flag.digit;
SHAB = SHAB | RP;
SHAB = SHAB << 2;
RP = p1 -> flag.displayed;
SHAB = SHAB | RP;
SHAB = SHAB << 2;
RP = p1 -> flag.modified;
SHAB = SHAB | RP;
switch(SHAB){
case 0 : ACS='\x40';break;
case 1 : ACS='\xC1';break;
case 4 : ACS='\xC4';break;
case 5 : ACS='\xC5';break;
case 8 : ACS='\xC8';break;
case 9 : ACS='\xC9';break;
case 12 : ACS='\x4C';break;
case 13 : ACS='\x4D';break;
case 16 : ACS='\x50';break;
case 17 : ACS='\xD1';break;
case 20 : ACS='\xD4';break;
case 21 : ACS='\xD5';break;
case 24 : ACS='\xD8';break;
case 25 : ACS='\xD9';break;
case 28 : ACS='\x5C';break;
case 29 : ACS='\x5D';break;
case 32 : ACS='\x60';break;
case 33 : ACS='\x61';break;
case 36 : ACS='\xE4';break;
case 37 : ACS='\xE5';break;
case 40 : ACS='\xE8';break;
case 41 : ACS='\xE9';break;
case 44 : ACS='\x6C';break;
case 45 : ACS='\x6D';break;
case 48 : ACS='\xF0';break;
case 49 : ACS='\xF1';break;
case 52 : ACS='\xF4';break;
case 53 : ACS='\xF5';break;
case 56 : ACS='\xF8';break;
case 57 : ACS='\xF9';break;
case 60 : ACS='\x7C';break;
case 61 : ACS='\x7D';break;
default : break;
} /* end switch */
*p2 = SBA;
addr = (p1->row-1)*80+(p1->column-1);
A = addr / 64 ;
B = addr % 64 ;
*(p2+1) = screen[A];
*(p2+2) = screen[B];
*(p2+3) = SF;
*(p2+4) = ACS;
strncpy((p2+5),p1 -> data_out,p1 ->length);
*(p2+5+(p1->length)) = SF;
*(p2+6+(p1->length)) = ACSEND;
p2 = (p2+FSIZEWP+(p1->length));
} /* end for */
/*--------------------------------------------------------*/
return(pvp);
} /* end vtout */